package com.gnerv.battle.boot.module.base.service.impl;

import com.gnerv.battle.boot.module.base.repository.mapper.OrgAccountMapper;
import com.gnerv.battle.boot.module.base.repository.mapper.OrgMapper;
import com.gnerv.battle.boot.module.base.model.bo.OrgBO;
import com.gnerv.battle.boot.module.base.model.dto.OrgDTO;
import com.gnerv.battle.boot.module.base.model.dto.OrgTreeDTO;
import com.gnerv.battle.boot.module.base.model.entity.Org;
import com.gnerv.battle.boot.module.base.service.CurrentAccountService;
import com.gnerv.battle.boot.module.base.service.OrgService;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * @author Gnerv LiGen
 */
@Service
@AllArgsConstructor
public class OrgServiceImpl implements OrgService {

    private final OrgMapper orgMapper;
    private final OrgAccountMapper orgAccountMapper;
    private final CurrentAccountService currentAccountService;

    @Override
    public boolean create(OrgBO orgBO) {
        Org org = orgBO.toCreateOrg();
        org.setCreator(currentAccountService.accountUkId());
        orgMapper.insert(org);
        return true;
    }

    @Override
    public boolean deleteByUkId(String ukId) {
        orgMapper.deleteByUkId(ukId);
        return true;
    }

    @Override
    public boolean updateByUkId(OrgBO orgBO) {
        Org org = orgBO.toUpdateOrg();
        orgMapper.updateByUkId(org);
        return true;
    }

    @Override
    public OrgDTO selectByUkId(String ukId) {
        return orgMapper.selectByUkId(ukId);
    }

    @Override
    public List<OrgDTO> listByName(String name) {
        return orgMapper.listByName(name);
    }

    @Override
    public List<OrgTreeDTO> listTreeByParentUkId(String parentUkId) {
        return orgMapper.listTreeByParentUkId(parentUkId);
    }

    @Override
    public List<OrgDTO> listByParentUkId(String parentUkId) {
        return orgMapper.listByParentUkId(parentUkId);
    }

    @Override
    public boolean bindAccount(String orgUkId, List<String> accountUkIdList) {
        orgAccountMapper.insertOrgAccount(orgUkId, accountUkIdList, currentAccountService.accountUkId());
        return true;
    }

    @Override
    public boolean unbindAccount(String orgUkId) {
        orgAccountMapper.deleteByOrgUkId(orgUkId);
        return true;
    }

    @Override
    public String selectUkIdByAccountUkId(String accountUkId) {
        return orgMapper.selectUkIdByAccountUkId(accountUkId);
    }

}




